\section{Introduction}
Advancements in processing capability with new multi-core units places strong focus on the development of software that can benefit from the advantages of parallel computing. As a result, developers are shifting attention toward programming languages that can support concurrency not only through libraries, but as a part of language structure. The main advantages of distributing tasks across multiple threads or processes is that it can increase the throughput of the application as well as improve the responsiveness of input/output commands. In addition, some computing problems such as developing efficient servers are well-suited to representation as concurrent processes communicating with each other.

One well-known language for programming concurrent and distributed systems is Erlang \cite{armstrong:erlang, wikstrom:erlang}. It is a functional programming language that supports asynchronous communication between processes, that is, a process continues its function immediately after sending a message. Its fault-tolerant lightweight concurrency base can support thousands of simultaneous processes without demanding extensive computational resources. In  order to represent parallel communication between processes, we will be focusing on a particular set of Erlang provides primitives, namely \emph{spawn}, \emph{send}, \emph{receive} and \emph{die}. %Spawn starts a new process with a unique ID \texttt{<x,y,z>}, that in turn is capable of spawning other processes. Send and receive represent basic communication between processes. An additional primitive that is more abstract is \emph{die} where the function representing a process calls \texttt{void()} or simply ends.
The Erlang language contains several functions for runtime data collection that are part of an extensive tracing framework. In our work, we focus on an extended Erlang debugging module called \texttt{dbg}. This module implements a basic textual interface to the native tracing functions \texttt{trace/3} and \texttt{trace\_pattern/2}, that allows tracing of functions, processes and messages on a text based terminal \cite{armstrong:erlang}.

Thomas Arts and Lars-Ake Fredlund 2002 \cite{tracing:erlang}, acknowledged the need for convenient trace generation and analysis techniques for the Erlang programming language. They devised a tracing tool that is able to collect, abstract and visually represent trace data from running systems. This paper will present a new way of analyzing Erlang trace files that is adaptable to large-scale distributed systems.